
/**
 * 采用顺序存储的栈叫做顺序栈，
 * 它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素，
 * 同时有一个栈顶项表示当前栈顶的元素
 * 
 * @@n个不同元素入栈，出栈元素不同排列的个数为:(C^n_2n)/(n+1)@@
 */

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 50
#define bool int
#define true !0
#define false 0
#define ElemType int

typedef struct {
	ElemType data[MAX_SIZE];		//存放栈中元素
	int top;						//栈顶指针,top始终指向栈顶元素
}SqStack;

//初始化线性栈
void init(SqStack &S);

//判断栈是否为空
bool StackIsEmpty(SqStack &S);

//进栈
bool Push(SqStack &S, ElemType data);

//出栈
bool Pop(SqStack &S, ElemType& x);

//读取栈顶元素（并不出栈）
bool getTop(SqStack &S, ElemType& e);

//遍历当前栈中的元素
void print(SqStack &stack);

int main()
{
	
}

void init(SqStack &S)
{
	S.top = -1;	//栈顶设置为-1,栈为空
}

bool StackIsEmpty(SqStack &S)
{
	return (S.top==-1)? true : false;
}

bool Push(SqStack &S, ElemType data)
{
	//判断栈是否已满
	if(S.top == MAX_SIZE-1) return false;
	
	//stack.top++;
	S.data[++S.top] = data;	//S.top++;S.data[S.top]=data
	return true;
}

bool Pop(SqStack &S, ElemType& e)
{
	//判断栈是否为空
	if(S.top == -1) return false;
	e = S.data[S.top--]
	return true;
}

bool getTop(SqStack &S, ElemType& e)
{
	//判断栈是否为空
	if(S.top == -1) return false;
	e = S.data[S.top];
	return true;
}

void print(SqStack &S)
{
	//判断站是否为空
	if(S.top == -1) return;
	int tp=S.top;
	while(tp-- != -1) printf("%d\n", S.data[tp]);
}